/*
  This file is part of JCM.

  JCM is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  JCM is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with JCM.  If not, see <http://www.gnu.org/licenses/>.
*/
import java.text.*;
import java.util.*;

/**
 * Conveniência para instânciamento de formatadores de números decimais
 * com Locale.
 *
 * Nota: O Locale default é Brasil.
*/
public class NumberFormatFactory
{
  /**
   * Constrói instância de DecimalFormat com Locale e pattern estipulados.
   *
   * @param locale Locale do formatador.
   * @param pattern Pattern do formatador.
   * @return Instância de formatador de decimais.
  */
  public static DecimalFormat getDecimalFormat(Locale locale, String pattern)
  {
    DecimalFormat formatter = (DecimalFormat) NumberFormat.getNumberInstance(locale);
    formatter.applyPattern(pattern);
    return formatter;
  }

  /**
   * Constrói instância de DecimalFormat com Locale default e pattern
   * estipulado.
   *
   * @param pattern Pattern do formatador.
   * @return Instância de formatador de decimais.
  */
  public static DecimalFormat getDecimalFormat(String pattern)
  {
    return getDecimalFormat(getLocaleBR(), pattern);
  }

  /**
   * Constrói instância de DecimalFormat com Locale e pattern defaults.
   *
   * @param pattern Pattern do formatador.
   * @return Instância de formatador de decimais.
  */
  public static DecimalFormat getDecimalFormat()
  {
    return getDecimalFormat(getLocaleBR(), defaultPattern);
  }

  /**
   * Constrói instância única de Locale Brasil.
   *
   * @return Instância única de Locale Brasil.
  */
  public static Locale getLocaleBR()
  {
    if (localeBR == null) localeBR = new Locale("pt", "BR");
    return localeBR;
  }

  /** Instância única de locale Brasil. */
  private static Locale localeBR;

  /** Default do pattern de formatação de números reais. */
  public static final String defaultPattern = "#,##0.00########";
}
